package com.example.graduationdesign.service;

import com.example.graduationdesign.pojo.dao.*;
import com.example.graduationdesign.pojo.dto.*;
import com.example.graduationdesign.pojo.vo.*;

import java.util.List;
import java.util.Map;

public interface ConsumerService {
    /**
     * 用于实现向客户端返回指定阶段的单词
     * @return
     */
    List<WordDao> wordinfo(Integer userStage);

    /**
     * 用于将用户的学习状态数据进行往studyrecord数据库表写入的操作
     * @param userStatusStudyDao
     * @return
     */
    Void UpadateStudyStatus(UserStatusStudyDao userStatusStudyDao);


    /**
     * 用于获取用户在学习状态下的实时的动作捕捉
     * @param studyRecordDto
     * @return
     */
    UserStatusStudyDao GetStatus(StudyRecordDto studyRecordDto);


    /**
     * 用于获取用户对该单词的状态
     * @param likeOrFavoriteDao
     * @return
     */
    Void isLikeOrFavorite(LikeOrFavoriteDao likeOrFavoriteDao);


    /**
     * 获取用户打卡时需要的题目情况
     * @param ConsumerStage
     * @param ConsumerId
     * @return
     */
    List<QuestionCheckDao> GetCheckQuestion(Integer ConsumerStage,Long ConsumerId);


    /**
     * 用于将前端传送的打卡记录写入checkrecord表中
     * @param questionCheckDto
     * @return
     */
    Integer WriteCheckRecord(QuestionCheckDto questionCheckDto);


    /**
     * 用于检查用户今日是否打卡的功能
     * @param consumerId
     * @return
     */
    Integer GetIsChecked(Long consumerId);


    /**
     * 按照用户编码获取用户的所有打卡记录
     * @param consumerId
     * @return
     */
    List<CheckRecordDao> GetCheckRecords(Long consumerId);


    /**
     * 用于删除用户的打卡记录
     * @param checkRecordDao
     * @return
     */
    Void DeleteCheckRecords(CheckRecordDao checkRecordDao);


    /**
     * 用于某用户来获取用户的测试题目
     * @param wordStage
     * @return
     */
    List<WordDao> GetTestQuestion(Integer wordStage);


    /**
     * 获取用户所应该学的单词数
     * @return
     */
    Integer GetWordNumber(Integer userStage);


    /**
     * 获取用户已经掌握的单词个数
     * @param userId
     * @param userStage
     * @return
     */
    Integer GetFamilarNumber(Long userId,Integer userStage);


    /**
     *  获取用户点赞的单词个数
     * @param userId
     * @param userStage
     * @return
     */
    Integer GetLikeNumber(Long userId,Integer userStage);


    /**
     *  获取用户收藏的单词个数
     * @param userId
     * @param userStage
     * @return
     */
    Integer GetFavoriteNumber(Long userId,Integer userStage);


    /**
     * 用于设置文章的阅读量
     * @param articleId
     * @return
     */
    Void SetArticleReadNumber(Long articleId);


    /**
     * 用于获取用户需要默写的单词个数
     * @param userId
     * @param userStage
     * @return
     */
    List<WordDao> GetReciteWord(Long userId,Integer userStage);


    /**
     * 用于用户获取积分
     * @param userId
     * @return
     */
    Long GetScore(Long userId);


    /**
     * 用于获取用户的笔记内容
     * @param userId
     * @return
     */
    List<NoteBookDao> GetNoteBook(Long userId);



    /**
     * 用于实现增加用户读书笔记的接口
     * @param userId
     * @param title
     * @param content
     * @return
     */
    Void AddNoteBook(Long userId,String title,String content);

    /**
     * 用于更新用户的笔记
     * @param userId
     * @param code
     * @param content
     * @param title
     * @return
     */
    Void UpdateNoteBook(Long userId,Long code,String content,String title);


    /**
     * 用于实现用户删除笔记的操作
     * @param noteCode
     * @return
     */
    Void DeleteNoteBook(Long noteCode);


    /**
     * 用于获取用户的排名
     * @param userId
     * @param userStage
     * @return
     */
    Long GetRank(Long userId,Integer userStage);


    /**
     * 用于实现获取词库中的单词，针对的不同的用户
     * @param userId
     * @param userStage
     * @return
     */
    List<WordPersonalVo> GetAllWords(Long userId, Integer userStage);



    /**
     * 用于获取轮播图数据
     * @return
     */
    List<BannersDto> GetBanners();

    /**
     * 用于获取学生在某个阶段积分排名
     * @return
     */
    List<ConsumerScoreDto> GetConsumerScoreRank(Integer stage);

    /**
     * 用于获取某一阶段用户的学习进度排名
     * @param stage
     * @return
     */
    List<ProgressRankDto> GetProgressRank(Integer stage);

    /**
     * 用于获取用户在某一个阶段的学习进度数据
     * @param userId
     * @param userStage
     * @return
     */
    MyStudyProgressDto getPersonalProgress(Long userId,Integer userStage);


    /**
     * 用于实现实时更新用户的闯关数据
     * @param userId
     * @param newLevel
     * @return
     */
    Void SetUserLevel(Long userId,Integer newLevel);


    /**
     * 用于获取用户在某个阶段所需要学习的单词数量
     * @param userId
     * @param userStage
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageInfo<WordDao> GetWord(Long userId,Integer userStage,Integer pageNum,Integer pageSize);


    /**
     * 主要用于将用户的测试数据插入至后端数据库中
     * @param submitTestDto
     * @return
     */
    Long SubmitTest(SubmitTestDto submitTestDto);


    /**
     * 主要用于获取某用户在某阶段的打卡错误记录
     * @param userId
     * @param userStage
     * @return
     */
    List<CheckMistakesVo> GetCheckMistakes(Long userId,Integer userStage);


    /**
     * 主要用于获取某用户在某阶段的测试错误记录
     * @param userId
     * @param userStage
     * @return
     */
    List<TestMistakesVo> GetTestMistakes(Long userId, Integer userStage);


    /**
     * 用于获取某个单词的详细信息
     * @param wordCode
     * @return
     */
    WordDao GetWordDetail(Long wordCode);

    /**
     * 用于实现获取打卡情况中已掌握的单词数量
     * @param userId
     * @param userStage
     * @return
     */
    Long GetCheckMasterCount(Long userId,Integer userStage);


    /**
     * 用于实现获取测试情况中已掌握的单词数量
     * @param userId
     * @param userStage
     * @return
     */
    Long GetTestMasterCount(Long userId, Integer userStage);

    /**
     * 用于帮助用户对打卡错题集的更新
     * @param userId
     * @param wordCode
     * @param time
     * @return
     */
    Void UpdateCheckMistakesMastered(Long userId, Long wordCode, String time);

    /**
     * 用于帮助用户对测试错题集的更新
     * @param userId
     * @param wordCode
     * @param time
     * @return
     */
    Void UpdateTestMistakesMastered(Long userId, Long wordCode, String time);


    /**
     * 用于实现获取用户默写的章节数
     * @param userId
     * @param userStage
     * @return
     */
    List<Map<String, Object>> getReciteChapters(Long userId, Integer userStage);


    /**
     * 用于获取用户指定章节的学习数据
     * @param userId
     * @param userStage
     * @param chapterIndex
     * @return
     */
    List<WordDao> getReciteWords(Long userId, Integer userStage, Integer chapterIndex);


    /**
     * 用于实现将用户的默写数据插入至后端数据库中
     * @param reciteRecordDto
     * @return
     */
    Long saveReciteRecord(ReciteRecordDto reciteRecordDto);

    /**
     * 用于评判用户在当前阶段的章节是否已经完成默写
     * @param userId
     * @param userStage
     * @param chapterIndex
     * @return
     */
    IsCompleteVo checkChapterCompletion(Long userId, Integer userStage, Integer chapterIndex);


    //获取默写报告
    WriteReportVo getReciteReport(Long userId, Long recordId);


    // 获取默写详情
    List<WriteReportDetailVo> getReciteDetails(Long recordId);

    //用于删除用户的默写数据
    Void DeleteData(Long recordId);


    /**
     * 用于实现用户进行兑换VIP的操作
     * @param consumerId
     * @return
     */
    Void ExchangeVip(Long consumerId);

}
